package com.example.interceptor;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ws
 * Date: 2024-03-03
 * Time: 14:09
 *
 * 过滤器属于 javaweb 的一部分，而拦截器属于 springmvc 的一部分
 * 拦截器作用和过滤器相同，但是能在整个 springmvc 流程中进行更细致的拦截操作
 * 过滤器在整个 springmvc 外部，拦截器在内部
 */
public class MyInterceptor implements HandlerInterceptor {


    /**
     * handler 执行对应的 controller 方法之前执行
     * 编码格式设置，登陆保护，权限处理
     * 类似 doFilter
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//       handler 调用方法的对象
        // true 放行，false 拦截
        System.out.println("preHandle");
        return true;
    }


    /**
     * handler 执行对应的 controller 方法完毕后执行，没有拦截机制了
     * 此方法只有 preHandler 方法返回 true 时才执行
     * <p>
     * 对结果处理，敏感词检查
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView 返回的视图和共享域对象
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }


    /**
     * 整体处理完毕
     *
     * @param request
     * @param response
     * @param handler
     * @param ex handler 报错了的异常对象
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}
